home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 483 / mkrscsrc / def.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-04-26  |  3.8 KB  |  146 lines

  1. #include "stdio.h"
  2. #include "gemdefs.h"
  3. #include "obdefs.h"
  4. #include "osbind.h"
  5. #include "mkrsc.h"
  6. #include "globals.h"
  7. #include "strings.h"
  8. #include <fcntl.h>
  9.  
  10.  
  11.  
  12. int make_def(dname)
  13.     char dname[];
  14. {
  15.     long size;
  16.     char temp[80];
  17.     int fildes, c, i, j, button, num;
  18.     long flenw;   /* number of bytes written to file */
  19.     objtreeptr    thetree, *linkptr;
  20.     defstruct1 def1;
  21.     defstruct2 def2;
  22.     int numobjs, order[MAXONUM];
  23.  
  24.     thetree = thefrontwin->inwindow;
  25.     linkptr = thetree->treelink;
  26.  
  27.  
  28.           Fdelete(dname);
  29. #ifndef __GNUC__
  30.           fildes = creat(dname,O_RDWR);
  31.       if(fildes != -1)    
  32. #else
  33.          fildes = creat(dname,0666);
  34.      if(fildes > -1)    
  35. #endif
  36.         {    num = 0;
  37.             for( i=1;i < thetree->count + 1; i++)
  38.             {    if(strlen(thetree->name[i])) num++;
  39.                 for(j=0;j < linkptr[i]->count+1;j++)
  40.                 if(strlen(linkptr[i]->name[j])) num++;
  41.             }
  42.             strcpy(def1.mkstr,"MKRCS1.0");
  43.             def1.num = num;
  44.             size = sizeof(defstruct1);
  45.             if( (flenw = Fwrite(fildes,size,(char *)&def1)) <= 0)
  46.             {
  47.                 button = form_alert(1, "[1][ Error writing file ][OK]");
  48.                 c = close(fildes);
  49.                 return;
  50.             }
  51.             
  52.             
  53.             for( i=1;i < thetree->count + 1; i++)
  54.             {    if(strlen(thetree->name[i]))
  55.                 {    def2.totree = 0;
  56.                     def2.index = i;
  57.                     def2.type = thetree->kind[i];
  58.                     strcpy(def2.namestr,thetree->name[i]);
  59.                     size = sizeof(defstruct2);
  60.                     if( (flenw = Fwrite(fildes,size,(char *)&def2)) <= 0)
  61.                     {
  62.                         button = form_alert(1, "[1][ Error writing file ][OK]");
  63.                            c = close(fildes);
  64.                         return;
  65.                     }
  66.                 }
  67.                 numobjs = trav_tree(linkptr[i]->objt,order);
  68.                 for(j=0;j < numobjs; j++)
  69.                 if(strlen(linkptr[i]->name[order[j]]))
  70.                 {    def2.totree = i;
  71.                     def2.index = j;
  72.                     def2.type = 0x100;
  73.                     strcpy(def2.namestr,linkptr[i]->name[order[j]]);
  74.                     size = sizeof(defstruct2);
  75.                     if( (flenw = Fwrite(fildes,size,(char *)&def2)) <= 0)
  76.                     {
  77.                         button = form_alert(1, "[1][ Error writing file ][OK]");
  78.                            c = close(fildes);
  79.                         return;
  80.                     }
  81.                 }
  82.             }
  83.             c = close(fildes);
  84.         }
  85.         else
  86.             button = form_alert(1, "[1][ Error creating file | Try 'SAVE AS' ][OK]");
  87. }
  88.  
  89. int read_def(dname)
  90.     char dname[];
  91. {
  92.     long size;
  93.     int fildes, c, i, button, num;
  94.     long red;   /* number of bytes read from file */
  95.     objtreeptr    thetree, *linkptr;
  96.     defstruct1 def1;
  97.     defstruct2 def2;
  98.  
  99.     thetree = thefrontwin->inwindow;
  100.     linkptr = thetree->treelink;
  101.  
  102.     size = sizeof(defstruct1);
  103. #ifndef __GNUC__
  104.       fildes = open(dname,O_BINARY);
  105.       if( (fildes == -1)||(red = Fread(fildes,size,(char *)&def1)) != size)
  106. #else
  107.      fildes = open(dname,0);
  108.      if( (fildes < 0)||(red = Fread(fildes,size,(char *)&def1)) != size)
  109. #endif
  110.             {    button = form_alert(1, "[1][ DEF file read error | or DEF file not found. ][OK]");
  111.                 close(fildes);
  112.                 return;
  113.             }
  114.     if(i=strcmp(def1.mkstr,"MKRCS1.0") != 0)
  115.             {    button = form_alert(1, "[1][ Incorrect .DEF file ][OK]");
  116.                 close(fildes);
  117.                 return;
  118.             }
  119.         num = def1.num;
  120.         size = sizeof(defstruct2);
  121.         for( i=0;i < num; i++)
  122.         {    if((red = Fread(fildes,size,(char *)&def2)) != size)
  123.             {    button = form_alert(1, "[1][ DEF file read error ][OK]");
  124.                 close(fildes);
  125.                 return;
  126.             }
  127.             if(def2.type < 0xFF)
  128.             {    thetree->kind[def2.index] = def2.type;
  129.                 linkptr[def2.index]->kind[0] = def2.type;
  130.                 strcpy(thetree->name[def2.index],def2.namestr);
  131.  
  132.     /* copy the new icon's ICONBLK to the maintree array of ICONBLKs    */
  133.  
  134.                 thetree->icblk[def2.index] =
  135.                             *((ICONBLK *)(treicont[def2.type].ob_spec));
  136.     /*  and point ICONBLK ptext to 'name' in maintree struct */
  137.  
  138.                 thetree->icblk[def2.index].ib_ptext =
  139.                                      thetree->name[def2.index];
  140.             }
  141.             else if(def2.type > 0xFF)
  142.                 strcpy(linkptr[def2.totree]->name[def2.index],def2.namestr);
  143.         }
  144.             c = close(fildes);
  145. }
  146.